/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.gob.pnp.model;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import pe.gob.pnp.beans.LoginForm;
import pe.gob.pnp.beans.ModuloBean;
import pe.gob.pnp.beans.OpcionBean;
import pe.gob.pnp.beans.UsuarioBean;
import pe.gob.pnp.factories.ConnectionPool;

/**
 *
 * @author gcarlos
 */
public class GestionUsuario {
    
    public List<UsuarioBean> validarUsuario(LoginForm vf) throws SQLException {
        Connection cn = null;
        List<UsuarioBean> usuarios = new ArrayList<UsuarioBean>();
        try {
            cn = ConnectionPool.obtenerConexion();
            String sql = "SELECT P.NPERS_IDENTIFICADOR,PP.NPEPO_IDENTIFICADOR,";
            sql += " P.CPERS_APEPATERNO || ' ' || P.CPERS_APEMATERNO || ' ' || ";
            sql += " P.CPERS_NOMBRE AS CPERS_APENOM,";
            sql += " U.NUSUA_IDENTIFICADOR, U.CUSUA_USERNAME,PP.NDEPE_IDENTIFICADOR";
            sql += " FROM PERMA_PERSONA P";
            sql += " INNER JOIN PERMA_PERSONALPOLICIAL PP";
            sql += " ON P.NPERS_IDENTIFICADOR = PP.NPERS_IDENTIFICADOR";
            sql += " INNER JOIN SEGMA_USUARIO U";
            sql += " ON U.NPEPO_IDENTIFICADOR = PP.NPEPO_IDENTIFICADOR";
            sql += " WHERE U.CUSUA_USERNAME = ? ";
            sql += " AND U.CUSUA_CLAVE=? ";
            PreparedStatement ps = cn.prepareStatement(sql);
            ps.setString(1, vf.getUsuario());
            ps.setString(2, vf.getPassword());
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                UsuarioBean usuario = new UsuarioBean();
                usuario.setNpers_identificador(rs.getInt("NPERS_IDENTIFICADOR"));
                usuario.setNpepo_identificador(rs.getInt("NPEPO_IDENTIFICADOR"));
                usuario.setCpers_apenom(rs.getString("CPERS_APENOM"));
                usuario.setNusua_identificador(rs.getInt("NUSUA_IDENTIFICADOR"));
                usuario.setCusua_username(rs.getString("CUSUA_USERNAME"));
                usuario.setNdepe_identificador(rs.getInt("NDEPE_IDENTIFICADOR"));
                usuarios.add(usuario);
            }
            rs.close();
            ps.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(cn);
        }
        return usuarios;
    }
    
    public List<ModuloBean> obtenerModuloAcceso(int usuario) throws SQLException {
        Connection cn = null;
        List<ModuloBean> listaModulos = new ArrayList<ModuloBean>();
        try {
            cn = ConnectionPool.obtenerConexion();
            String sql = "SELECT  DISTINCT M.NMODU_IDENTIFICADOR,M.CMODU_DESCRIPCION";
            sql += " FROM SEGMA_APLICACION A";
            sql += " INNER JOIN SEGMA_MODULO M";
            sql += " ON A.NAPLI_IDENTIFICADOR = M.NAPLI_IDENTIFICADOR";
            sql += " INNER JOIN SEGMA_RECURSO R";
            sql += " ON M.NMODU_IDENTIFICADOR = R.NMODU_IDENTIFICADOR";
            sql += " INNER JOIN SEGMA_PERFILRECURSO PR";
            sql += " ON PR.NRECU_IDENTIFICADOR = R.NRECU_IDENTIFICADOR";
            sql += " INNER JOIN SEGDE_PERFILUSUARIO PU";
            sql += " ON PR.NPERF_IDENTIFICADOR = PU.NPERF_IDENTIFICADOR";
            sql += " AND PU.NUSUA_IDENTIFICADOR =?";
            sql += " WHERE A.BAPLI_ACTIVO=1";
            sql += " AND M.BMODU_ACTIVO = 1";
            sql += " AND R.BRECU_ACTIVO =1";
            sql += " ORDER BY M.CMODU_DESCRIPCION";
            PreparedStatement ps = cn.prepareStatement(sql);
            ps.setInt(1, usuario);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                ModuloBean modulo = new ModuloBean();
                modulo.setNmoduCodigo(rs.getInt("NMODU_IDENTIFICADOR"));
                modulo.setCmoduDescripcion(rs.getString("CMODU_DESCRIPCION"));
                listaModulos.add(modulo);
            }
            rs.close();
            ps.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(cn);
        }
        return listaModulos;
    }
    
    public List<OpcionBean> obtenerOpcionModulo(int usuario) throws SQLException {
        Connection cn = null;
        List<OpcionBean> listaOpciones = new ArrayList<OpcionBean>();
        try {
            cn = ConnectionPool.obtenerConexion();
            String sql = "SELECT  M.NMODU_IDENTIFICADOR,M.CMODU_DESCRIPCION,";
            sql += " R.NRECU_IDENTIFICADOR,R.CRECU_NOMBRE,";
            sql += " R.CRECU_URL";
            sql += " FROM SEGMA_APLICACION A";
            sql += " INNER JOIN SEGMA_MODULO M";
            sql += " ON A.NAPLI_IDENTIFICADOR = M.NAPLI_IDENTIFICADOR";
            sql += " INNER JOIN SEGMA_RECURSO R";
            sql += " ON M.NMODU_IDENTIFICADOR = R.NMODU_IDENTIFICADOR";
            sql += " INNER JOIN SEGMA_PERFILRECURSO PR";
            sql += " ON PR.NRECU_IDENTIFICADOR = R.NRECU_IDENTIFICADOR";
            sql += " INNER JOIN SEGDE_PERFILUSUARIO PU";
            sql += " ON PR.NPERF_IDENTIFICADOR = PU.NPERF_IDENTIFICADOR";
            sql += " AND PU.NUSUA_IDENTIFICADOR =?";
            sql += " WHERE A.BAPLI_ACTIVO=1";
            sql += " AND M.BMODU_ACTIVO = 1";
            sql += " AND R.BRECU_ACTIVO =1";
            sql += " ORDER BY A.CAPLI_DESCRIPCION,M.NMODU_ORDEN,R.NRECU_ORDEN";
            PreparedStatement ps = cn.prepareStatement(sql);
            ps.setInt(1, usuario);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                OpcionBean opciones = new OpcionBean();
                opciones.setNmodu_Codigo(rs.getInt("NMODU_IDENTIFICADOR"));
                opciones.setNopci_Codigo(rs.getInt("NRECU_IDENTIFICADOR"));
                opciones.setCopci_Descripcion(rs.getString("CRECU_NOMBRE"));
                opciones.setCopci_Url(rs.getString("CRECU_URL"));
                listaOpciones.add(opciones);
            }
            rs.close();
            ps.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(cn);
        }
        return listaOpciones;
    }
}
